Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / core / model / src / commonMain / kotlin / org / meshtastic / core / model / FirmwareUpdateNoticePolicy.kt

Displaying Raw • Download

core/model/src/commonMain/kotlin/org/meshtastic/core/model/FirmwareUpdateNoticePolicy.kt bd2863243bab6eb213401d949839a2bc74dde7e2 (bd286324) Text, 5.22 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.core.model

T8b949e/** Connection transports that can determine the Android firmware-update destination. */
Tff7b72enum Tff7b72class T56d364FirmwareUpdateTransport Tb4b4b4{
Te6edf3BluetoothTb4b4b4,
Te6edf3SerialTb4b4b4,
Te6edf3TcpTb4b4b4,
Tb4b4b4}

T8b949e/** Where a firmware-update nudge takes the user. */
Tff7b72enum Tff7b72class T56d364FirmwareUpdateDestination Tb4b4b4{
Te6edf3AndroidUpdateTb4b4b4,
Te6edf3MeshtasticFlasherTb4b4b4,
Tb4b4b4}

T8b949e/** The only permitted visual treatment for a firmware update: an informational update nudge. */
Tff7b72enum Tff7b72class T56d364FirmwareUpdateNoticePresentation Tb4b4b4{
Te6edf3UpdateTb4b4b4,
Tb4b4b4}

T8b949e/** Fully validated connected-device firmware update information for platform UI and notifications. */
Tff7b72data Tff7b72class T56d364FirmwareUpdateNoticeTb4b4b4(
Tff7b72val Te6edf3notificationKeyTb4b4b4: Tffa657StringTb4b4b4,
Tff7b72val Te6edf3currentVersionTb4b4b4: Tffa657StringTb4b4b4,
Tff7b72val Te6edf3stableVersionTb4b4b4: Tffa657StringTb4b4b4,
Tff7b72val Te6edf3destinationTb4b4b4: Te6edf3FirmwareUpdateDestinationTb4b4b4,
Tff7b72val Te6edf3presentationTb4b4b4: Te6edf3FirmwareUpdateNoticePresentation Tff7b72= Te6edf3FirmwareUpdateNoticePresentationTb4b4b4.Te6edf3UpdateTb4b4b4,
Tb4b4b4)

T8b949e/**
* Determines whether a connected local device is behind the latest stable firmware and where it can be updated.
*
* The policy deliberately fails closed: a notice needs a known node identity, hardware target, and valid current and
* stable versions. It must never interpret an unknown or malformed version as an update opportunity.
*/
Tff7b72object T56d364FirmwareUpdateNoticePolicy Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3VERSION_REGEX Tff7b72= Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff^v?(Ta5d6ff\\Ta5d6ffd+)Ta5d6ff\\Ta5d6ff.(Ta5d6ff\\Ta5d6ffd+)Ta5d6ff\\Ta5d6ff.(Ta5d6ff\\Ta5d6ffd+)(?:[.+-].*)?$Ta5d6ff"Tb4b4b4)

Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffReturnCountTa5d6ff"Tb4b4b4)
Tff7b72fun Td2a8ffcreateNoticeTb4b4b4(
Te6edf3nodeIdentityTb4b4b4: Tffa657String?Tb4b4b4,
Te6edf3currentVersionTb4b4b4: Tffa657String?Tb4b4b4,
Te6edf3stableVersionTb4b4b4: Tffa657String?Tb4b4b4,
Te6edf3hardwareTb4b4b4: Te6edf3DeviceHardware?Tb4b4b4,
Te6edf3transportTb4b4b4: Te6edf3FirmwareUpdateTransportTb4b4b4,
Te6edf3releaseTargetsTb4b4b4: Te6edf3SetTff7b72<Tffa657StringTff7b72>Tb4b4b4,
Tb4b4b4)Tb4b4b4: Te6edf3FirmwareUpdateNotice? Tb4b4b4{
Tff7b72val Te6edf3identity Tff7b72= Te6edf3nodeIdentityTff7b72?.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3takeIf Tb4b4b4{ Tff7b72!Tffa657itTb4b4b4.Te6edf3isNullOrEmptyTb4b4b4(Tb4b4b4) Tb4b4b4} Tff7b72?: Tff7b72return Tff7b72null
Tff7b72val Te6edf3deviceHardware Tff7b72= Te6edf3hardware Tff7b72?: Tff7b72return Tff7b72null
Tff7b72val Te6edf3target Tff7b72= Te6edf3deviceHardwareTb4b4b4.Te6edf3platformioTargetTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4) Tb4b4b4} Tff7b72?: Tff7b72return Tff7b72null
Tff7b72if Tb4b4b4(Te6edf3releaseTargetsTb4b4b4.Te6edf3none Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3equalsTb4b4b4(Te6edf3targetTb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tb4b4b4}Tb4b4b4) Tff7b72return Tff7b72null
Tff7b72val Te6edf3current Tff7b72= Te6edf3currentVersionTff7b72?.Te6edf3letTb4b4b4(Tff7b72::Te6edf3parseVersionTb4b4b4) Tff7b72?: Tff7b72return Tff7b72null
Tff7b72val Te6edf3stable Tff7b72= Te6edf3stableVersionTff7b72?.Te6edf3letTb4b4b4(Tff7b72::Te6edf3parseVersionTb4b4b4) Tff7b72?: Tff7b72return Tff7b72null
Tff7b72if Tb4b4b4(Te6edf3current Tff7b72>Tff7b72= Te6edf3stableTb4b4b4) Tff7b72return Tff7b72null

Tff7b72return Te6edf3FirmwareUpdateNoticeTb4b4b4(
Te6edf3notificationKey Tff7b72= Te6edf3notificationKeyTb4b4b4(Te6edf3identityTb4b4b4, Te6edf3targetTb4b4b4, Te6edf3stableTb4b4b4.Te6edf3normalizedTb4b4b4)Tb4b4b4,
Te6edf3currentVersion Tff7b72= Te6edf3currentTb4b4b4.Te6edf3normalizedTb4b4b4,
Te6edf3stableVersion Tff7b72= Te6edf3stableTb4b4b4.Te6edf3normalizedTb4b4b4,
Te6edf3destination Tff7b72= Te6edf3destinationForTb4b4b4(Te6edf3deviceHardwareTb4b4b4, Te6edf3transportTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tff7b72fun Td2a8ffnotificationKeyTb4b4b4(Te6edf3nodeIdentityTb4b4b4: Tffa657StringTb4b4b4, Te6edf3hardwareTargetTb4b4b4: Tffa657StringTb4b4b4, Te6edf3stableVersionTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Tffa657String Tb4b4b4{
Tff7b72val Te6edf3normalizedStable Tff7b72= Te6edf3parseVersionTb4b4b4(Te6edf3stableVersionTb4b4b4)Tff7b72?.Te6edf3normalized Tff7b72?: Te6edf3stableVersionTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6fffirmware-update-notified:Tffd700$Te6edf3nodeIdentityTa5d6ff:Tffd700$Te6edf3hardwareTargetTa5d6ff:Tffd700$Te6edf3normalizedStableTa5d6ff"
Tb4b4b4}

Tff7b72fun Td2a8ffshouldScheduleTb4b4b4(Te6edf3notificationKeyTb4b4b4: Tffa657StringTb4b4b4, Te6edf3alreadyScheduledTb4b4b4: Te6edf3SetTff7b72<Tffa657StringTff7b72>Tb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72=
Te6edf3notificationKey Tff7b72!in Te6edf3alreadyScheduled

Tff7b72private Tff7b72fun Td2a8ffdestinationForTb4b4b4(
Te6edf3hardwareTb4b4b4: Te6edf3DeviceHardwareTb4b4b4,
Te6edf3transportTb4b4b4: Te6edf3FirmwareUpdateTransportTb4b4b4,
Tb4b4b4)Tb4b4b4: Te6edf3FirmwareUpdateDestination Tff7b72= Tff7b72if Tb4b4b4(Te6edf3hardwareTb4b4b4.Te6edf3supportsAndroidUpdateTb4b4b4(Te6edf3transportTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3FirmwareUpdateDestinationTb4b4b4.Te6edf3AndroidUpdate
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3FirmwareUpdateDestinationTb4b4b4.Te6edf3MeshtasticFlasher
Tb4b4b4}

Tff7b72private Tff7b72fun Te6edf3DeviceHardwareTb4b4b4.Td2a8ffsupportsAndroidUpdateTb4b4b4(Te6edf3transportTb4b4b4: Te6edf3FirmwareUpdateTransportTb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72= Tff7b72when Tb4b4b4(Te6edf3transportTb4b4b4) Tb4b4b4{
Te6edf3FirmwareUpdateTransportTb4b4b4.Te6edf3Bluetooth Tff7b72-Tff7b72> Te6edf3isEsp32Arc Tff7b72|Tff7b72| Te6edf3architectureTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffnrfTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4)

Te6edf3FirmwareUpdateTransportTb4b4b4.Te6edf3Serial Tff7b72-Tff7b72>
Tff7b72!Te6edf3isEsp32Arc Tff7b72&Tff7b72&
Tb4b4b4(
Te6edf3architectureTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffnrfTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72|Tff7b72|
Te6edf3architectureTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffrp2040Ta5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4)
Tb4b4b4)

Te6edf3FirmwareUpdateTransportTb4b4b4.Te6edf3Tcp Tff7b72-Tff7b72> Te6edf3isEsp32Arc
Tb4b4b4}

Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffReturnCountTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72fun Td2a8ffparseVersionTb4b4b4(Te6edf3valueTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Te6edf3ParsedVersion? Tb4b4b4{
Tff7b72val Te6edf3match Tff7b72= Te6edf3VERSION_REGEXTb4b4b4.Te6edf3matchEntireTb4b4b4(Te6edf3valueTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72?: Tff7b72return Tff7b72null
Tff7b72val Tb4b4b4(Te6edf3majorTb4b4b4, Te6edf3minorTb4b4b4, Te6edf3patchTb4b4b4) Tff7b72= Te6edf3matchTb4b4b4.Te6edf3destructured
Tff7b72return Te6edf3ParsedVersionTb4b4b4(
Te6edf3major Tff7b72= Te6edf3majorTb4b4b4.Te6edf3toIntOrNullTb4b4b4(Tb4b4b4) Tff7b72?: Tff7b72return Tff7b72nullTb4b4b4,
Te6edf3minor Tff7b72= Te6edf3minorTb4b4b4.Te6edf3toIntOrNullTb4b4b4(Tb4b4b4) Tff7b72?: Tff7b72return Tff7b72nullTb4b4b4,
Te6edf3patch Tff7b72= Te6edf3patchTb4b4b4.Te6edf3toIntOrNullTb4b4b4(Tb4b4b4) Tff7b72?: Tff7b72return Tff7b72nullTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72data Tff7b72class T56d364ParsedVersionTb4b4b4(Tff7b72val Te6edf3majorTb4b4b4: Tffa657IntTb4b4b4, Tff7b72val Te6edf3minorTb4b4b4: Tffa657IntTb4b4b4, Tff7b72val Te6edf3patchTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4: Te6edf3ComparableTff7b72<Te6edf3ParsedVersionTff7b72> Tb4b4b4{
Tff7b72val Te6edf3normalizedTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Tffd700$Te6edf3majorTa5d6ff.Tffd700$Te6edf3minorTa5d6ff.Tffd700$Te6edf3patchTa5d6ff"

Tff7b72override Tff7b72fun Td2a8ffcompareToTb4b4b4(Te6edf3otherTb4b4b4: Te6edf3ParsedVersionTb4b4b4)Tb4b4b4: Tffa657Int Tff7b72=
Te6edf3compareValuesByTb4b4b4(Tff7b72thisTb4b4b4, Te6edf3otherTb4b4b4, Te6edf3ParsedVersionTff7b72::Te6edf3majorTb4b4b4, Te6edf3ParsedVersionTff7b72::Te6edf3minorTb4b4b4, Te6edf3ParsedVersionTff7b72::Te6edf3patchTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.06s